#! /bin/sh
# Copyright (C) 2001, 2006, 2009-2021 Free Software Foundation, Inc.
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.

. "${srcdir=.}/init.sh"; path_prepend_ ../src

cz=cs_CZ.UTF-8

# If cs_CZ.UTF-8 locale doesn't work, skip this test.
LC_ALL=$cz locale -k LC_CTYPE 2>/dev/null | grep -q charmap.*UTF-8 \
  || skip_ this system lacks the $cz locale

# If matching is done in single-byte mode, skip this test too
printf 'é\n' | LC_ALL=$cz grep -Eq '^[é]{2}$'
case $? in
  0) skip_ "built without multi-byte support";;
  1) ;;
  *) fail_ "unexpected exit status: $?";;
esac

failures=0

cat > csinput <<EOF
01 Žluťoučká číše
ČíŠE 02
03 Z číší Čiší cosi
04 Čí
Še 05
06 ČČČČČČČíšČÍŠčíš
07 ČČČ ČČČČíšČÍŠčíšEEEE
čAs 08
09Čapka
10ČaSy se měnÍ
ČÍšE11
Čas12
𝇕ČÍšE𝇓13
ŽČÍšE𝇓14
𝇕ČÍšEŽ15
ŽČÍšEŽ16
ČÍšE𝇓17
ČÍšEŽ18
19𝇕ČÍše
20ŽČÍše
EOF
cat > cspatfile <<EOF
ČÍšE
Čas
EOF

for mode in F G E; do

test1=$(echo $(LC_ALL=$cz grep -${mode} -f cspatfile csinput |
               tr -cs '0-9' '[ *]'))
if test "$test1" != "11 12 13 14 15 16 17 18"; then
  echo "Test #1 ${mode} failed: $test1"
  failures=1
fi

test2=$(echo $(LC_ALL=$cz grep -${mode}i -f cspatfile csinput |
               tr -cs '0-9' '[ *]'))
if test "$test2" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
  echo "Test #2 ${mode} failed: $test2"
  failures=1
fi

test3=$(echo $(LC_ALL=$cz grep -${mode}i -e 'ČÍšE' -e 'Čas' csinput |
               tr -cs '0-9' '[ *]'))
if test "$test3" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
  echo "Test #3 ${mode} failed: $test3"
  failures=1
fi

# Skip the next test - known to fail. TAA.
#test4=$(echo $(LC_ALL=$cz; export LC_ALL
#               grep -${mode}iw -f cspatfile csinput |
#                 sed 's/[^0123456789]/ /g'))
#if test "$test4" != "01 02 08 13 17 19"; then
#  echo "Test #4 ${mode} failed: $test4"
#  failures=1
#fi

# Test that --color=always does not depend on individual pattern order
# within the pattern list, and that a longer match is preferred to a
# shorter one starting at the same point.
test6="$(echo 'Cosi tu ČišÍ...' \
  | LC_ALL=$cz grep --color=always -${mode}i -e 'čiš' -e 'čiší')"
if echo "$test6" \
  | LC_ALL=C grep -q 'Cosi tu .*\[.*m\(.\[K\)\?ČišÍ.*\[.*m\(.\[K\)\?\.\.\.'; \
then
  :
else
  echo "Test #6 ${mode} failed: $test6"
  failures=1
fi

# Test that --color=always does not depend on individual pattern order
# within the pattern list, and that a longer match is preferred to a
# shorter one starting at the same point.
test7="$(echo 'Cosi tu ČišÍ...' \
  | LC_ALL=$cz grep --color=always -${mode}i -e 'čiší' -e 'čiš')"
if echo "$test7" \
  | LC_ALL=C grep -q 'Cosi tu .*\[.*m\(.\[K\)\?ČišÍ.*\[.*m\(.\[K\)\?\.\.\.'; \
then
  :
else
  echo "Test #7 ${mode} failed: $test7"
  failures=1
fi

done

for mode in G E; do

test8=$(echo $(LC_ALL=$cz grep -${mode}i -e 'Č.šE' -e 'Č[a-f]s' csinput |
               tr -cs '0-9' '[ *]'))
if test "$test8" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
  echo "Test #8 ${mode} failed: $test8"
  failures=1
fi

done

Exit $failures
